Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by www.netzwerkartist.de...

 << zurück
Visual C# 2005 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2005

Visual C# 2005
1.320 S., mit 2 CDs, 59,90 Euro
Galileo Computing
ISBN 3-89842-586-X
gp Kapitel 15 Grundlagen zum Erstellen einer Windows-Anwendung
  gp 15.1 Die Entwicklungsumgebung
  gp 15.2 Eine erste Windows-Anwendung
  gp 15.3 Das Codegerüst einer Windows-Anwendung
    gp 15.3.1 Die Datei »Program.cs«
    gp 15.3.2 Die Dateien »Form1.cs« und »Form1.Designer.cs«
  gp 15.4 Ereignisse grafischer Windows-Komponenten
    gp 15.4.1 Grundlegende Anmerkungen
    gp 15.4.2 Ereignisse mit Ereignisdaten
    gp 15.4.3 Ereignishandler mit dem Visual Studio 2005 bereitstellen
    gp 15.4.4 Ereignisbehandlung mit den »OnXxx«-Methoden
  gp 15.5 Die Basisklassen einer Form
    gp 15.5.1 Die Klasse »Control«
    gp 15.5.2 Die Klasse »ScrollableControl«
    gp 15.5.3 Die Klasse »ContainerControl«
  gp 15.6 Die Eigenschaften einer Form
    gp 15.6.1 Die Rahmendarstellung einer Form
    gp 15.6.2 Formspezifisches Symbol festlegen
    gp 15.6.3 Die Schaltflächen in der Titelleiste
    gp 15.6.4 Spielereien mit »Opacity« und »TransparencyKey«
    gp 15.6.5 Fenster, die nicht verdeckt werden können
    gp 15.6.6 Den Mauszeiger verändern
    gp 15.6.7 Farbeinstellungen mit dem Typ »Color«
    gp 15.6.8 Schriftart mit dem Typ »Font«
    gp 15.6.9 Die Abmessungen einer Form festlegen
    gp 15.6.10 Die Position eines Fensters
    gp 15.6.11 Der Anzeigezustand eines Fensters nach dem Öffnen
    gp 15.6.12 Die Arbeitsfläche des Fensters (der Clientbereich)
    gp 15.6.13 Die Auflistung »ControlsCollection«
    gp 15.6.14 Zusammenfassung der Eigenschaften des Form-Objekts
  gp 15.7 Ereignisse einer Form
    gp 15.7.1 Ereignisse beim Erzeugen eines Fenster
    gp 15.7.2 Größenänderung einer Form
    gp 15.7.3 Ereignisse beim Schließen eines Fensters
  gp 15.8 Anwendungen mit mehreren Fenstern
    gp 15.8.1 Neue Forms hinzufügen
    gp 15.8.2 Formulare laden, anzeigen, verstecken und schließen
    gp 15.8.3 Mehrere Fenster verwalten
    gp 15.8.4 Formulare in einem eigenen Thread laufen lassen
    gp 15.8.5 Splash-Fenster
  gp 15.9 Modale Dialogfenster
    gp 15.9.1 Layout eines Dialogfensters
    gp 15.9.2 Die Eigenschaft »DialogResult«
    gp 15.9.3 Eine Form modal öffnen
    gp 15.9.4 Die Weitergabe von Resultaten aus einem Dialog
    gp 15.9.5 Dialoge mit einer »Übernehmen«-Schaltfläche
    gp 15.9.6 Fokussierreihenfolge und Standardschaltflächen
  gp 15.10 Meldungsfenster mit »MessageBox«
    gp 15.10.1 Die Methode »MessageBox.Show«
    gp 15.10.2 Der Rückgabewert der Meldungsfenster
  gp 15.11 Das Speichern in der Registrierungsdatenbank
    gp 15.11.1 Die Klassen »Registry« und »RegistrKey«
    gp 15.11.2 Programmbeispiel zum Speichern in der Registrierung
  gp 15.12 Die Klasse »Application«
    gp 15.12.1 Die Datei »AssemblyInfo.cs«
    gp 15.12.2 Mit »Application.DoEvents« wartende Ereignisse abrufen
    gp 15.12.3 Zusammenfassung Eigenschaften und Methoden


Galileo Computing

15.7 Ereignisse einer Fordowntop

Die meisten der von einem Form-Objekt veröffentlichten Ereignisse werden von der Basisklasse Control geerbt und sind somit auch Ereignisse aller anderen grafischen Komponenten, die Control als Basisklasse haben. An dieser Stelle eine lückenlose Liste aufzuführen, würde den Rahmen sprengen, deshalb werden wir uns auf zwei Ereignisgruppen beschränken: Ereignisse, die im Zusammenhang mit dem Laden einer Form stehen, und Ereignisse, die mit dem Entladen in Verbindung gebracht werden. Viele andere, hier noch nicht erwähnte Ereignisse werden durch die Interaktion mit der Maus oder durch die Tastatureingabe ausgelöst. Mit diesen Ereignissen setzen wir uns in einem anderen Kapitel auseinander.

Eine weitere große Gruppe bilden Ereignisse, deren Auslösung durch die Änderung einer Eigenschaft verursacht wird. Stellvertretend für diese Ereignisse seien an dieser Stelle BackColorChanged und VisibleChanged erwähnt. Auf die Ereignisse dieser Gruppe gehen wir nicht näher ein.


Galileo Computing

15.7.1 Ereignisse beim Erzeugen eines Fenster  downtop

Beim Laden einer Form werden nach dem Aufruf des Konstruktors mehrere Ereignisse in der folgenden Reihenfolge ausgelöst:

gp  Move
gp  Load
gp  Layout
gp  Activated
gp  Paint

Die Ereignisreihenfolge ist für Sie als Entwickler nicht unwichtig, denn sie hat entscheidenden Einfluss darauf, in welchem Ereignis Sie Ihren Code schreiben. Initialisieren Sie beispielsweise Variablen im Load-Ereignis, stehen diese Werte in dem vorher ausgelösten Ereignis Move noch nicht zur Verfügung. Der Konstruktor einer Form, der in dieser Kette auch eine Rolle spielt, wird ausgeführt, bevor das erste Ereignis der Form ausgelöst wird. Das bedeutet für Sie, dass alle Komponenten der Form beim Auftreten des ersten Ereignisses bereits durch InitializeComponent initialisiert sind.

Es folgt nun eine Beschreibung der oben angeführten Ereignisses beim Laden einer Form:

gp  Activated wird ausgelöst, sobald das Formular den Fokus erhält. Das ist der Fall, wenn die Form geladen und angezeigt wird. Außerdem wird dieses Ereignis ausgelöst, wenn eine deaktivierte Form wieder zur aktiven wird.
gp  Layout tritt jedes Mal auf, wenn ein Control neu positioniert werden muss. Um die Performance zu verbessern, unterdrückt die Initialisierungsroutine dieses Ereignis durch den Aufruf der Methode SuspendLayout und hebt mit ResumeLayout die Sperre wieder auf.
gp  Load wird nach dem Initialisieren der Form ausgelöst, jedoch noch bevor das Formular angezeigt wird. Damit ist dieses Ereignis für Anweisungen geeignet, die weitere Ressourcen bereitstellen, beispielsweise eine Datenbankverbindung aufzubauen oder eine Datei zu öffnen.
gp  Move tritt beim Verschieben einer Komponente auf.
gp  Paint tritt immer dann ein, wenn das Fenster neu gezeichnet werden muss. Insbesondere diesem Ereignis werden wir noch besondere Aufmerksamkeit schenken, wenn wir uns mit der grafischen Programmierung beschäftigen.

Galileo Computing

15.7.2 Größenänderung einer Form  downtop

Ereignisreihenfolgen spielen auch dann eine wichtige Rolle, wenn sich zur Laufzeit Bedingungen ändern. Verändern Sie zum Beispiel die Größe der Form oder maximieren Sie sie, kommt es zu den Ereignissen Layout, Resize, SizeChanged und Paint.

Wenn Sie sich nicht klar über die Ereignisreihenfolge sind bzw. wenn Sie wissen wollen, welche Ereignisse bei einer bestimmten Operation ausgelöst werden, empfiehlt es sich, im entsprechenden Ereignishandler die Ausgabe einer Zeichenfolge zu codieren, z.B. mit Debug.WriteLine.


Galileo Computing

15.7.3 Ereignisse beim Schließen eines Fensters  toptop

So wie beim Laden und Anzeigen einer Form eine Ereigniskette durchlaufen wird, kommt es dazu auch beim Entladen einer Form:

gp  FormClosing
gp  FormClosed
gp  Deactivate

Erst daran anschließend wird der Destruktor ausgeführt.


Hinweis   Im .NET Framework 2.0 sind die beiden Ereignisbezeichner FormClosing und FormClosed neu. Im .NET Framework 1.0/1.1 hießen die entsprechenden Ereignisse noch Closing und Closed. Hier handelt es sich aber um keine willkürliche Maßnahme, sondern um eine Notwendigkeit, die ihre Ursache darin hat, dass der Typ des zweiten Parameters des Ereignishandlers verändert worden ist.

Am wichtigsten ist das Ereignis FormClosing, denn es bietet über dem Parameter vom Typ FormClosingEventArgs und dessen Eigenschaft Cancel die Möglichkeit, den eingeleiteten Schließvorgang der Form quasi im letzten Moment noch einmal abzubrechen. Wird Cancel=true gesetzt, wird die Form nicht geschlossen, der Standardwert false ist gleichbedeutend mit dem unwiderruflichen Schließen.

Das folgende Codefragment zeigt die typische Implementierung dieses Ereignisses. Wird die Form geschlossen und FormClosing ausgelöst, wird ein Meldungsfenster angezeigt, das den Anwender zur Bestätigung des Schließvorgangs oder zum Abbruch des Schließens auffordert. Meldungsfenster behandeln wir in Abschnitt 15.10. Klickt der Anwender die Nein-Schaltfläche im Meldungsfenster, kommt es zum Abbruch des eingeleiteten Schließvorgangs.


// -------------------------------------------------------------
// Beispiel: ...\Kapitel 15\FormClosingEventDemo
// -------------------------------------------------------------
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
  DialogResult dr = 
      MessageBox.Show("Wollen Sie die Anwendung beenden?",
         "Anwendungsmeldung",
         MessageBoxButtons.YesNo,
         MessageBoxIcon.Question,
           MessageBoxDefaultButton.Button2);
  // wird im Meldungsfenster die Schaltflächen 'Nein'
  // geklickt, wird der Schließvorgang abgebrochen
  if(dr == DialogResult.No)
    e.Cancel = true;
}

Ist der Ereignishandler von FormClosing vollständig abgearbeitet, ohne den Schließvorgang mit Cancel abzubrechen, wird FormClosed ausgelöst. Jetzt kann das Schließen der Form nicht mehr verhindert werden. Spätestens in diesem Ereignis sollten, falls erforderlich, alle Daten in einer Datei gespeichert und die von der Form beanspruchten Ressourcen wieder freigegeben werden.

Den Grund des Schließens ermitteln

Der Parameter FormClosingEventArgs weist neben der Eigenschaft Cancel noch eine zweite typspezifische auf: CloseReason, die dem Ereignishandler die Ursache des Schließens mitteilt. Sie als Entwickler können damit im Bedarfsfall die auszuführenden Aktionen in Abhängigkeit von der Ursache steuern. CloseReason liefert eine Konstante der gleichnamigen Enumeration, deren Werte Sie der folgenden Tabelle entnehmen können.


Tabelle 15.11   Konstanten der Enumeration »CloseReason«

CloseReason-Member Beschreibung
ApplicationExitCall Die Methode Application.Exit wurde aufgerufen.
FormOwnerClosing Das Besitzerformular wurde geschlossen.
MdiFormClosing Die übergeordnete MDI-Form wurde geschlossen.
None Die Ursache für das Schließen ist unbekannt.
TaskManagerClosing Die Anwendung wurde mit dem Task-Manager geschlossen
UserClosing Das Formular wurde über die Benutzeroberfläche geschlossen.
WindowsShutDown Das Betriebssystem Windows wurde heruntergefahren.


Hinweis   Wenn einem Formular ein anderes Formular als Besitzer zugeordnet ist, wird es zusammen mit dem Besitzerformular minimiert und geschlossen. Um einem Formular ein anderes Formular als Besitzer zuzuweisen, rufen Sie die AddOwnedForm-Methode auf.

 << zurück
  
  Zum Katalog
Zum Katalog: Visual C# 2005
Visual C# 2005
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Fortgeschrittene Programmierung mit Visual C# 2005






 Fortgeschrittene
 Programmierung
 mit Visual C# 2005


Zum Katalog: Einstieg in Visual C# 2005






 Einstieg in
 Visual C# 2005


Zum Katalog: Einstieg in Visual Basic 2005






 Einstieg in
 Visual Basic 2005


Zum Katalog: Visual Basic 2005






 Visual Basic 2005


Zum Katalog: Java ist auch eine Insel






 Java ist auch eine
 Insel


Zum Katalog: Konzepte und Lösungen für Microsoft-Netzwerke






 Konzepte und
 Lösungen für
 Microsoft-Netzwerke


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de